﻿
// Cobot_PrintServerDlg.h: 头文件
//

#pragma once

#include "CServerDlg.h"
#include "CRecipe.h"
#include "RFIDReadImpl.h"

#include "httplib.h"

#include <boost/make_shared.hpp>

// CCobotPrintServerDlg 对话框
class CCobotPrintServerDlg : public CDialogEx
{
// 构造
public:
	CCobotPrintServerDlg(CWnd* pParent = nullptr);	// 标准构造函数

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_COBOT_PRINTSERVER_DIALOG };
	   
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnStart();
	afx_msg void OnUpdateStart(CCmdUI* pCmdUI);

	afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);
	afx_msg void OnStop();
	afx_msg void OnUpdateStop(CCmdUI* pCmdUI);
	afx_msg void OnParamSet();
	afx_msg void OnTcnSelchangeTabMain(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnDestroy();
	afx_msg void OnTimer(UINT_PTR nIDEvent);
	afx_msg void OnSize(UINT nType, int cx, int cy);

	afx_msg void OnRFIDStart();
	afx_msg void OnUpdateRFIDStart(CCmdUI* pCmdUI);
	afx_msg void OnRFIDStop();
	afx_msg void OnUpdateRFIDStop(CCmdUI* pCmdUI);
	afx_msg void OnLoadMedbox();
	virtual BOOL PreTranslateMessage(MSG* pMsg); // 屏蔽用户输入的enter 和esc 退出按钮;

public:
	void PostMessageToServerWindow(int status);
	void showRecipeList(const httplib::Request& req, httplib::Response& res);
	void showCurRecipeInfo(const httplib::Request& req, httplib::Response& res);
	void printCurRecipeInfo(const httplib::Request& req, httplib::Response& res);
	void printShortDrugList(const httplib::Request& req, httplib::Response& res);    // 打印发药机的缺药清单;

	void loadRecipeAndPrintInfo();
	void getRecipeTaskInfo();      // 获取处方任务信息;
	void sendPrintStatusToDev(const httplib::Request& req, httplib::Response& res);  // 当发药机查询打印机状态时，将打印机状态发送给发药机;

	void loadMedicineBoxInfo();   // 加载文件medicineBox.json 获取药框相关信息;

	void sendMedicineBoxIdToServer(int id); // 发送药框编号到药房管理系统;
private:
	
	void OnInitTab();
	void SelectTabPage();
	bool init();  
	void PostMessageToRecipeWindow();   // 更新当前处方列表到已处理列表;
	void UpdateHistoryRecipeMessage();  // WM_UPDATE_HISTORY_RECIPE
	void ResetRecipeWindowMessage();    // 23:00:00 清空当天所有数据,同时刷新界面;
	void UpdateRecipeNumMessage(int all, int finish, int pending);     // 每10s 更新处方详情;
	void UpdateMedicineBoxIdMessage(int medicineNum);  // 配药单打印系统具备举动刷框功能，并更新界面;
	void ChangeSize(UINT nID, int x, int y); // nID 为控件ID, x y 分别为对话框的当前长和宽;

public:

	CMenu      m_Menu;
	CTabCtrl   m_ctrTab;
	CServerDlg m_serverDlg;
	CRecipe    m_recipeDlg;
	CRect      m_rect;           // 用于保存原来对话框大小;
	RFIDReadImpl m_RFIDRead;
	bool queryPrinterStatusStart;
	bool getRecipeTaskInfoStart;   // 查询药房管理系统处方信息开始标志;

	boost::shared_ptr<httplib::Client> httpClient;
	boost::shared_ptr<httplib::Client> httpClient_MedicineBox;

	int port;	            // 端口号;
	int comRFID;            // RFID串口号;
 	std::string remoteIP ;  // 药房管理系统IP地址;
	bool isRFIDComOpen;     // RFID串口是否打开;


};